Aller au contenu principal

Commandes Kubernetes Engine


Question kubectl

kubectl est l'outil de ligne de commande utilisé pour gérer les clusters Kubernetes.

Gestion des ressources du cluster

  • kubectl get : affiche une liste de ressources du cluster, telles que les pods, les services, les noeuds, etc.
  • kubectl describe : affiche des informations détaillées sur une ressource spécifique du cluster, comme les labels, les annnotations, les events, etc.
    • kubectl describe node 192.168.1.157
  • kubectl create : crée une nouvelle ressource dans le cluster, comme un pod, un service, etc.
  • kubectl delete : supprime une ressource du cluster.

Gestion des pods et des containers

  • kubectl exec : exécute une commande dans un container de pod.
  • kubectl logs : affiche les logs d'un container de pod.
  • kubectl attach : se connecte à un container de pod en mode interactif.
  • kubectl port-forward : redirige les ports d'un container de pod vers un port local.
    • kubectl port-forward --address 0.0.0.0 w 8080:80
  • kubectl label nodes node1 disktype=ssd : Ajoute un label au nodes (ici node1) pour le scheduler en fonction d'un label par exemple

Afficher la liste des pods

- kubectl get pods [En option <POD NAME>]
    -o : format de sortie
        - wide : afficher l'ip du pod et le nœud qui l'héberge
        - yaml : afficher encore plus d'informations sur un pod sous      
        - format YAML
        - json : afficher encore plus d'informations sur un pod sous      
        - format JSON
    --template : récupérer des informations précises de la sortie de la commande
  • Récupérer l'IP d'un pod :
kubectl get pod  <POD NAME>      
--template={{.status.podIP}}

Créer un Pod

- kubectl create -f <filename.yaml>

Supprimer un pod

- kubectl delete pods <POD NAME>


Appliquer des nouveaux changements à votre Pod sans le détruire

  • kubectl apply -f <filename.yaml>

Afficher les détails d'un pod

  • kubectl describe pods <POD NAME>

Exécuter une commande d'un conteneur de votre pod

- kubectl exec <POD NAME> -c <CONTAINER NAME> <COMMAND>

       -t : Allouer un pseudo TTY
       -i : Garder un STDIN ouvert

Afficher les logs d'un conteneur dans un pod

kubectl logs <POD NAME> -c <CONTAINER NAME>
      -f : suivre en permanence les logs du conteneur
      --tail : nombre de lignes les plus récentes à afficher
      --since=1h : afficher tous les logs du conteneur au cours de la dernière heure
     --timestamps : afficher la date et l'heure de réception des logs d'un conteneur

Gestion de la configuration du cluster

  • kubectl config : gère la configuration du client kubectl, comme l'ajout ou la suppression de clusters, de contexts, etc.

Autres options courantes

  • --namespace : spécifie le namespace dans lequel exécuter la commande.
  • --output : spécifie le format de sortie des données de la commande (par exemple, --output=yaml pour afficher les données au format YAML).
  • --dry-run : exécute la commande en mode simulation sans apporter de modifications réelles dans le cluster.
  • --pod-manifest-path : spécifie le chemin vers le fichier de manifeste de pod qui décrit les pods à exécuter sur le noeud.
  • --allow-privileged : autorise l'exécution de pods avec des privilèges élevés
  • --network-plugin : spécifie le plugin de réseau à utiliser pour le noeud.
  • --cgroup-driver : spécifie le pilote de cgroup à utiliser pour le noeud.

Générer un fichier YAML depuis une commande

kubectl run db \
> --image mongo:4.0 \
> --dry-run=client \
> -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: db
  name: db
spec:
  containers:
  - image: mongo:4.0
    name: db
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

Test
  • kubectl expose pod whoami --type NodePort --port=8080 --target-port=80 --dry-run=client -o yaml
    • "selector: run: whoami" dans votre yaml
Test
  • kubectl create service nodeport whoami --tcp 8080:80 --dry-run=client -o yaml
    • "selector: run: whoami" dans votre yaml
Test
  • kubectl run www --image=nginx --port 8080 80 --expose --dry-run=client -o yaml
    • Créer un pod et l'expose vers l'exterieur